"""
查询

xxx.query.[过滤器].[执行器]

- 查询过滤器【可选】
    - filter()
    - filter_by()
    - limit
    - offset()
    - order_by()
    - group_by()

- 查询执行器【必选】
    - all()
    - first()
    - first_or_404()
    - get()
    - get_or_404()
    - count()

    # page: 表示要查询的页数；per_page: 表示每页有多少条数据；
    # Error_out: False查不到不会报错；会返回 paginate 对象
    - paginate(page, per_page, Error_out)  # 分页

    # paginate.pages 总页数
    # paginate.page 当前页
    # paginate.items 当前的对象列表

"""

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

# 2. 设置数据库的配置信息
# mysql://[用户名]:[密码]@[主机地址][端口号]/[数据库名]
app.config["SQLALCHEMY_DATABASE_URI"] = "mysql://root:123456@127.0.0.1:3306/data36"
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False


# 3. 创建 sqlalchemy 对象 db，关联 app
db = SQLAlchemy(app)


# 4. 编写模型类，继承自 db.Model
# 角色【一方】
class Role(db.Model):  # 默认表名为 student
    # 【主键】 参数1：表示 id 的类型；参数2：表示 id 的约束类型
    __tablename__ = "roles"  # 手动设置表名
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(32))


# 用户【多方】
class User(db.Model):  # 默认表名为 student
    # 【主键】 参数1：表示 id 的类型；参数2：表示 id 的约束类型
    __tablename__ = "users"  # 手动设置表名
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(32))

    # 建立外键
    role_id = db.Column(db.Integer, db.ForeignKey(Role.id))


@app.route("/")
def helloworld():
    return "hello world Flask"


def add():
    role = Role(name="role")
    db.session.add(role)
    db.session.commit()
    user = User(name="user", role_id=role.id)
    db.session.add(user)
    db.session.commit()


if __name__ == "__main__":
    # 创建数据库的表，创建的是继承自 db.Model 的表
    with app.app_context():
        # 创建所有继承自db.Model的表
        # db.create_all()
        # 删除所有继承自db.Model的表
        # db.drop_all()
        pass

        add()
    app.run(debug=True)
